/*
 * ----------------------------------------------------------------
 *  FECHA      HORA     NOMBRE       COMENTARIO
 * ----------------------------------------------------------------
 *  14/05/08   19:20    ALEX         Creación de implementació
 *  30/05/08   17:22    ALEX         Afegida documentació del metodes privats.
 *                     
 */

package net.ieslaferreria.infoCiutat;

import java.util.Date;

/**
 * Implementació de la interficie Gestor
 * @author Alex, Javi, David y Sergio
 */
public class GestorImpl implements Gestor{
    
    /*
     * Constant que especifica la ruta on trobara els arxius necessaris per
     * poder carregar la nova ciutat descarregada.
     */
    final String rutaImportacio = null;
    
    /*
     * Variable que guarda la ruta que cerquem.
     */
    private Ruta ruta = null;
    
    /*
     * Variable que guarda les dades personals de l'usuari.
     */
    private DadesPersonals dades = null;
    
    /*
     * Instancia del manager d'arestes amb el qual farem cerques d'arestes.
     */
    private ArestaManager arestes = null;
    
    /*
     * Instancia del manager de punts amb el qual farem cerques de punts.
     */
    private PuntManager punts = null;
    
    /*
     * Instancia del manager de xarxes amb el qual farem cerques de xarxes.
     */
    private XarxaManager xarxes = null;
    
    /*
     * Variable on guardarem el punt on iniciarem la ruta.
     */ 
    private Punt puntOrigen = null;
    
    /*
     * Variable on guardem els parametres de cerca.
     */
    private ParametresCerca parametres;
        
    public void setPuntOrigen(Punt puntOrigen) {
        this.parametres.setPuntInici(puntOrigen);
    }

    public void cercaRutaPuntInteres(String nomPuntInteres) {
        Cerca cerca = new CercaImpl();
        Punt puntDesti = (Punt)this.punts.getPuntInteres(nomPuntInteres);
        this.parametres.setPuntFinal(puntDesti);
        this.ruta = cerca.cercaRuta(this.parametres);
    }

    public void cercaRutaCruilla(String nomCarrer, String nomCarrer2) {
        Cerca cerca = new CercaImpl();
        Punt puntDesti = (Punt)this.punts.getCruilla(nomCarrer, nomCarrer2);
        this.parametres.setPuntFinal(puntDesti);
        this.ruta = cerca.cercaRuta(this.parametres);
    }

    public void cercaRutaCarrer(String nomCarrer) {
        Cerca cerca = new CercaImpl();
        Punt puntDesti = (Punt)this.getPuntMig(nomCarrer);
        this.parametres.setPuntFinal(puntDesti);
        this.ruta = cerca.cercaRuta(this.parametres);
    }

    public void cercaRutaCarrer(String nomCarrer, int numero) {
        Cerca cerca = new CercaImpl();
        Punt puntDesti = (Punt)this.getPunt(this.arestes.
                            getLlistaArestes(nomCarrer,numero),numero);
        this.parametres.setPuntFinal(puntDesti);
        this.ruta = cerca.cercaRuta(this.parametres);
    }

    public void cercaRutaContacte(String nomContacte) {
        Cerca cerca = new CercaImpl();
        Punt puntDesti = (Punt)this.punts.getContacte(nomContacte);
        this.parametres.setPuntFinal(puntDesti);
        this.ruta = cerca.cercaRuta(this.parametres);
    }

    public void importarDades() {
        /*
         * Falta investigar on guarda les dades la Perst Lite
         */
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    /**
     * Retornarà un punt situat aproximadament a la meitat del carrer que li
     * passem per parametres.
     * 
     * @param carrer
     * @return Punt
     */
    private Punt getPuntMig(String carrer){
        int min = this.arestes.getNumMinCarrer(carrer);
        int max = this.arestes.getNumMaxCarrer(carrer);
        Aresta aresta = this.arestes.getLlistaArestes(carrer, (max/2));
        return this.getPunt(aresta, (max/2));
    }
    
    /**
     * Retiorna el punt situat al carrer que li passem per parametres a
     * l'alçada del numero de porta que li passem també.
     * 
     * @param carrer
     * @param num
     * @return Punt
     */
    private Punt getPunt(Aresta carrer, int num){
        PuntInteres ret = new PuntImpl();
        ret.setCoordenades(carrer, num);
        return ret;
    }

    public void setDate(Date data) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
